\chapter{XML - Extensible Markup Language}

\lstset{
    language=XML,
    captionpos=b,
    tabsize=3,
    frame=lines,
    keywordstyle=\color{blue},
    commentstyle=\color{darkgreen},
    stringstyle=\color{red},
    breaklines=true,
    showstringspaces=false,
    basicstyle=\footnotesize,
    emph={label}
}

Aplikace Visualizer používá jako zdroje dat XML\cite{xmlhome} dokumenty. XML představuje obecně platný standard konsorcia W3C pro uchovávání dat v hierarchické struktuře pomocí specifického značkovacího jazyka.

Standard XML je natolik univerzální a rozšířený, že na jeho základě lze vytvořit mnoho dalších značkovacích jazyků a definovat komplexní struktury dat (\emph{včetně databázových struktur}). Zmíněné XML dokumenty představují text uspořádaný v určité hierarchické posloupnosti. Tento text je vždy uložen ve formátu Unicode a je čitelný pomocí kteréhokoliv textového editoru.

\section{Struktura XML dokumentu}
Struktura XML dokumentu spočívá v hirarchickém uspořádání elementů XML. Prvky obsažené v této struktuře se mohou skládat z:
\begin{itemize}
\item kořenového uzlu
\item elementů
\item atributů
\item textových uzlů
\item instrukcí
\item komentářů
\item jmenných prostorů
\end{itemize}

\clearpage
\section{Syntaxe XML}
Syntaxe XML, definovaná konsorciem W3C, udává vlastnost dokumentu well-formed. Aby dokument této vlastnosti vyhověl, musí splňovat všechny následující vlastnosti, přičemž jména elementů rozlišují velká a malá písmena:
\begin{itemize}
\item musí obsahovat právě jeden kořenový (\emph{root}) element
\item neprázdné elementy musí být ohraničeny startovací \verb <  a ukončovací \verb >  značkou
\item prázdné elementy mohou být označeny značkou prázdný element \verb /> ~
\item všechny hodnoty atributů musí být uzavřeny v uvozovkách - jednoduchých \verb ' nebo dvojitých \verb "  - a to na počátku i na konci jeho hodnoty. Opačný pár uvozovek může být použit pouze uvnitř hodnot.
\item elementy mohou být vnořeny, ale nemohou se překrývat - to znamená, že každý (\emph{ne-kořenový}) element musí být celý obsažen v jiném elementu.
\end{itemize}

\noindent
\textbf{Dokument, který nesplňuje vlastnost well-formed se nepovažuje za platný XML dokument.}

Následující obrázek \ref{fig:xml} je uveden jako příklad formátování a hierarchické struktury XML dokumentu.
\begin{figure}[!h]
\begin{lstlisting}[frame=single]
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
   <book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Guide</title>
      <genre>Computer</genre>
      <price>44.95</price>
      <publish_date>2000-10-01</publish_date>
   </book>
<catalog>
\end{lstlisting}
\caption{Ukázka části XML dokumentu}
\label{fig:xml}
\end{figure}

\section{DTD - Document Type Definition}
DTD určuje strukturu XML dokumentu. Validací XML dokumentu je jeho ověření oproti definici DTD . Dokument je validní pokud splní všechny požadavky této definice.

\noindent
DTD definicí lze specifikovat:
\begin{itemize}
\item jména elementů
\item pozici elementů v XML a jejich počet
\item obsah elementů
\item jména atributů v elementu a povinnost je uvést
\item obsah atributů
\end{itemize}

\clearpage
\noindent
Ukázka DTD definice pro XML dokument uvedený na obrázku \ref{fig:dtd}:
\begin{figure}[!h]
\begin{lstlisting}[frame=single]
<!ELEMENT catalog      (book+)>
<!ELEMENT book         (author,title,genre,price,publish_date,
                        description)>
<!ELEMENT author       (#PCDATA)>
<!ELEMENT title        (#PCDATA)>
<!ELEMENT genre        (#PCDATA)>
<!ELEMENT price        (#PCDATA)>
<!ELEMENT publish_date (#PCDATA)>
<!ATTLIST book id CDATA #REQUIRED>
\end{lstlisting}
\caption{Ukázka DTD definice}
\label{fig:dtd}
\end{figure}

XML dokument je možné validovat i jinými prostředky, které jsou odlišné od DTD. Příkladem takové specifikace je XML Schéma\footnote{XML Schéma - \href{XML Schéma}{http://www.w3schools.com/Schema/default.asp}} standardizované konsorciem W3C.


\section{DOM - Document Object Model}
Hlavním důvodem specifikace DOM byla myšlenka na jednotné a jazykově či platformově nezávislé rozhraní pro práci s dokumentem. K popisu jednotlivých rozhraní specifikace byl použit jazyk IDL\footnote{Interface Definition Language - standardní jazyk pro definicí funkcí a metod objektů}.

DOM je ve své podstatě pouze sada rozhraní tj. API určených pro práci s validními HTML a XML dokumenty. Tato sada definuje logickou strukturu dokumentu a prostředky zprostředkující práci s dokumentem.

Z pohledu implementace představuje DOM logickou strukturu uzlů XML dokumentu. Samotná specifikace nepřikazuje nutnost implementace této logické struktury jako datové struktury typu \verb|strom| a ani se nedotýká způsobu implementace vztahu mezi jednotlivými uzly. V kontextu této bakalářské práce bude stromová struktura uzlů brána jako výchozí implementace DOM.


\noindent
Prvky implementující objektový model DOM se definují:
\begin{itemize}
\item množinou rozhraní a objektů použitých k reprezentaci a manipulaci s dokumentem
\item sémantikou těchto rozhraní a objektu s jejich chováním a vlastnostmi
\item vztahy a spoluprácí mezi těmito rozhraními a objekty
\end{itemize}

Konsorcium W3C postupně vydalo tři verze tohoto objektového modelu. Poslední verze, DOM 3.0, vyšla v roce 2004 a mimo jiné přidala podporu jazyka XPath.

\noindent
Obrázek \ref{fig:dom} znázorňuje stromovou reprzezentaci uzlů XML dokumentu.

\begin{figure}[h]
\begin{center}
\includegraphics[width=12cm]{figures/dom-tree.png}
\caption{Hiararchický model DOMu.}
\label{fig:dom}
\end{center}
\end{figure}

